﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AgriMarketWebProj.AgriMarketService;
using AgriMarketWebProj.Models;

namespace AgriMarketWebProj.Controllers
{
    public class AuctioneerAdminController : Controller
    {
        //
        // GET: /AuctioneerAdmin/
        public ActionResult CheckLogIn_Require()
        {
            AgriMarketWebService service = new AgriMarketWebService();
            UserAccount userAccount = null;
            if (Session["CurrentUserAccount"] != null)
            {
                userAccount = service.GetUserAccountByUserName(Session["CurrentUserAccount"].ToString());
                ViewBag.CurrentUserAccount = userAccount;
                if (userAccount.TypeOfUser.TypeId != AdminCode.AdminTypeCode)
                    return Content("Bạn không có quyền truy cập!");
                return null;
            }
            else
            {
                TempData["ReturnUrl"] = Request.Url.PathAndQuery;
                return RedirectToAction("LogIn", "UserAccount");
            }
        }
        public void CheckLogIn_NoRequire()
        {
            AgriMarketWebService service = new AgriMarketWebService();
            UserAccount userAccount = null;
            if (Session["CurrentUserAccount"] != null)
            {
                userAccount = service.GetUserAccountByUserName(Session["CurrentUserAccount"].ToString());
                ViewBag.CurrentUserAccount = userAccount;
            }
        }
        public ActionResult Index()
        {
            AgriMarketWebService service = new AgriMarketWebService();
            ActionResult actionResult = CheckLogIn_Require();
            if (actionResult != null)
                return actionResult;
            return View("Index",service.GetAllAuctioneers());
        }

        //
        // GET: /AuctioneerAdmin/Details/5

        public ActionResult Details(int id)
        {
            return View();
        }

        //
        // GET: /AuctioneerAdmin/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /AuctioneerAdmin/Create

        [HttpPost]
        public ActionResult Create(FormCollection collection)
        {
            try
            {
                // TODO: Add insert logic here

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
        
        //
        // GET: /AuctioneerAdmin/Edit/5
 
        public ActionResult Edit(int id)
        {
            AgriMarketWebService service = new AgriMarketWebService();
            ActionResult actionResult = CheckLogIn_Require();
            if (actionResult != null)
                return actionResult;
            Auctioneer auctioneer = service.GetAuctioneerById(id);
            if (auctioneer == null)
                ModelState.AddModelError("Error","Không tồn tại lần đấu giá này");
            return View("EditAuctioneer",auctioneer);
        }

        //
        // POST: /AuctioneerAdmin/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection collection)
        {
            
            try
            {
                // TODO: Add update logic here
                AgriMarketWebService service = new AgriMarketWebService();
                ActionResult actionResult = CheckLogIn_Require();
                if (actionResult != null)
                    return actionResult;
                bool isOK = true;
                string message = "";

                int auctioneerId = id;

                decimal price;
                if (!decimal.TryParse(collection["Price"], out price))
                {
                    message += "Giá không hợp lệ\n";
                    ModelState.AddModelError("Price", "Giá không hợp lệ");
                    isOK = false;
                }

                DateTime postedDate;
                if (!DateTime.TryParse(collection["PostedDate"], out postedDate))
                {
                    message += "Thời gian đăng bài không hợp lệ\n";
                    ModelState.AddModelError("PostedDate", "Thời gian đăng bài không hợp lệ");
                    isOK = false;
                }

                int auctionId;
                if (!int.TryParse(collection["AuctionId"], out auctionId))
                {
                    message += "Mã bài đấu giá không hợp lệ\n";
                    ModelState.AddModelError("AuctionId", "Mã bài đấu giá không hợp lệ");
                    isOK = false;
                }

                if (service.GetAuctionById(auctionId)==null)
                {
                    message += "Mã bài đấu giá không tồn tại\n";
                    ModelState.AddModelError("AuctionId1", "Mã bài đấu giá không tồn tại");
                    isOK = false;
                }

                string userAccName = collection["AuthorId"];

                if (userAccName.Trim() == "")
                {
                    message += "Thiếu thông tin người đăng bài\n";
                    ModelState.AddModelError("UserAccName", "Thiếu thông tin người đăng bài");
                    isOK = false;
                }

                UserAccount userAcc = service.GetUserAccountByUserName(userAccName);

                if (userAcc == null)
                {
                    message += "Người đăng bài không tồn tại\n";
                    ModelState.AddModelError("UserAccName1", "Người đăng bài không tồn tại");
                    isOK = false;
                }

                if (isOK) {

                    Auctioneer updatedAuctioneer = new Auctioneer() {
                        AuctioneerId=auctioneerId,
                        AuctionId=auctionId,
                        Price=price,
                        PostedDate=postedDate,
                        AuthorId=userAccName
                    };

                    int state = service.UpdateAuctioneer(updatedAuctioneer);
                    if (state != 0)
                        ModelState.AddModelError("Error", "Cập nhật thất bại");
                    else
                        return RedirectToAction("Index");
                }
                Auctioneer auctioneer = service.GetAuctioneerById(id);
                if (auctioneer == null)
                    ModelState.AddModelError("Error", "Không load được dữ liệu của người đấu giá");
                return View("EditAuctioneer", auctioneer);
            }
            catch
            {
                return View();
            }
        }

        //
        // GET: /AuctioneerAdmin/Delete/5
 
        public ActionResult Delete(int id)
        {
            AgriMarketWebService service = new AgriMarketWebService();
            bool state = service.DeleteAuctioneerById(id);
            return RedirectToAction("Index");
        }

        //
        // POST: /AuctioneerAdmin/Delete/5

        [HttpPost]
        public ActionResult Delete(int id, FormCollection collection)
        {
            try
            {
                // TODO: Add delete logic here
 
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}
